package 其他;

import java.util.ArrayList;
import java.util.HashMap;
//import lombok.val;
import lombok.NonNull;
public class 使用lombok {
  public String example() {
    var example = new ArrayList<String>();
    example.add("Hello, World!");
    var foo = example.get(0);
    return foo.toLowerCase();
  }

  public void example2() {
    var map = new HashMap<Integer, String>();
    map.put(0, "zero");
    map.put(5, "five");
    for (var entry : map.entrySet()) {
      System.out.printf("%d: %s\n", entry.getKey(), entry.getValue());
    }
  }
}
/*
Lombok是一个Java库，能自动插入编辑器并构建工具，简化Java开发。通过添加注解的方式，不需要为类编写getter或eques方法，同时
可以自动化日志变量。
简而言之：Lombok能以简单的注解形式来简化java代码，提高开发人员的开发效率。
maven依赖：
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.18.4</version>
	<scope>provided</scope>
</dependency>

还需在Eclipse安装目录下找到eclipse.ini文件增加一行：
-javaagent:F:\LocalRepository\repository\org\projectlombok\lombok\1.18.24\lombok-1.18.24.jar
                                         ↑
                    指lombok.jar所在目录，上面是本机Maven依赖确定的lombok.jar所在目录
                     
常用注解：
@Setter 注解在类或字段，注解在类时为所有字段生成setter方法，注解在字段上时只为该字段生成setter方法。如：@ToString(callSuper = true)调用父类的toString()方法
@Getter 使用方法同上，区别在于生成的是getter方法。如：@Getter(AccessLevel.PROTECTED)
@ToString 注解在类，添加toString方法。如：@ToString(exclude = {“id”,“name”}) 不包含 id、name
@EqualsAndHashCode 注解在类，生成hashCode和equals方法。所有非静态，非transient字段。但是可以通过在可选的exclude参数中来排除更多字段。
@NoArgsConstructor 注解在类，生成无参的构造方法。如：@NoArgsConstructor(force = true)
@RequiredArgsConstructor 注解在类，为类中需要特殊处理的字段生成构造方法，比如final和被@NonNull注解的字段。又如：@RequiredArgsConstructor(staticName = “of”)会生成一个of()的静态方法，并把构造方法设置为私有的
@AllArgsConstructor 注解在类，生成包含类中所有字段的构造方法。
@Data 注解在类，生成setter/getter、equals、canEqual、hashCode、toString方法，如为final属性，则不会为该属性生成setter方法。
@Slf4j 注解在类，生成log变量，严格意义来说是常量。private static final Logger log = LoggerFactory.getLogger(UserController.class);
@Accessors 主要用于控制生成的getter和setter
@NonNull 在方法或构造器的参数上使用，生成一个空值检查的声明。
@Value 将字段都变成不可变类型:使用final修饰， 同时还包含@ToString、@EqualsAndHashCode、@AllArgsConstructor 、@Getter(注意只有Getter没有Setter)
@Synchronized 给方法加上同步锁
@Cleanup主要用来修饰 IO 流相关类, 会在 finally 代码块中对该资源进行 close();
@Wither提供了给final字段赋值的一种方法
@Builder注释为你的类生成复杂的构建器API。
@Delegate 为List类型的字段生成一大堆常用的方法，其实这些方法都是List中的方法，注意：一个类中只能使用一个@Delegate注解，因为使用多个会生成多个size()方法，从而会编译报错。

*/